As computers have become concurrently more powerful and less expensive, the applications in which computers are utilized have become more diverse. Once largely confined to scientific or clerical applications, computers are now commonly being employed in a wider variety of applications. Because computers have become significantly less expensive, users can economically justify the use of computers in dedicated applications, where the computer is only responsible for a narrow set of tasks.
For example, many computers have been utilized as control devices, despite having the capacity to perform a much wider range of functions. A computer being utilized as a control device may be dedicated to the performance of a single task or a narrow set of tasks. For example, a computer might be required to monitor the voltage level from a temperature detecting device and compare that to some predetermined level. In this example, the computer might be programmed to trigger a cooling system if a particular threshold temperature is reached; create an alarm signal if the temperature is not reduced within a predetermined time period; or transmit a status report via a telephone line.
The versatility and low cost of computers has made them desirable for dedicated tasks, because most users can readily program a computer to accommodate changed conditions or changed objectives. On the other hand, many of a computer's capabilities go unutilized in a dedicated task application.
Often, a dedicated computer is utilized in an application where the computer is "embedded" within a system and serves as a component of that system. The system may require the computer to perform a specific task or generate specific output, in order for the system to perform a larger set of tasks. Examples of such applications include the use of a computer as a network server, as a controller for industrial equipment, and as a component of a private branch exchange (PBX) telephone system. Commonly, an embedded computer must be monitored and controlled by the system or another external device, in order to coordinate the computer's operation with the operation of the system.
Where an embedded computer is needed for a particular application, such as for a PBX system, the computer best suited for the application is often a commercially available (i.e., off-the-shelf), general purpose microcomputer. Such a microcomputer is suitable as an embedded computer, because it is inexpensive, sufficiently powerful, and readily adaptable for immediate implementation. Most commercially available microcomputers are extremely versatile, permitting re-programming when necessary to accommodate changed circumstances or objectives. Moreover, software is readily available for such microcomputers to perform a wide variety of tasks. Even in cases where the embedded application requires a very narrow set of tasks, the relatively low cost of a commercially available microcomputer often makes it preferable to a dedicated-task computer. A dedicated-task computer must be designed, manufactured, and programmed before it is ready for implementation. Because it is not mass-produced like commercially available microcomputers, the dedicated-task computer is relatively more expensive. Furthermore, any changed circumstances or objectives may require an expensive re-design of the dedicated-task computer.
Accordingly, designers of embedded systems applications tend to incorporate commercially available computers where possible, to increase efficiency, flexibility, and interchangability of the embedded computer. In many cases, the presence of peripheral devices, such as an attached keyboard or attached video monitor, may be unnecessary for or detrimental to the operation of an embedded computer. Alternatively, an embedded computer's need for such a peripheral device may be so limited that another device may be used as a substitute for a particular peripheral device, when the occasional need arises. Emulation is a means, well known to those skilled in the computer arts, of monitoring and controlling a computer and/or its peripheral devices. Emulation also may include communication with a computer that simulates the operation of one or more of the computer's peripheral devices. Emulation can be effected by external devices such as another computer, a remote computer communicating over a modem and telephone line arrangement, a computer network, or any other device or set of devices equipped to communicate with a computer.
In this context, a peripheral device can be any device functionally connected to the central processing unit of a computer, such as a keyboard, video monitor, mouse, or printer. Emulation may involve communicating control or data messages from an external device to the computer to substitute for the messages that otherwise would be communicated from the absent, emulated peripheral device. For example, an external device may communicate signals to the computer and these signals may simulate the operation of a keyboard. In such an arrangement, the external device might simulate the keystrokes that would otherwise be generated by a user typing on a keyboard attached to the computer.
Another example is the emulation of a video monitor. An external device might be utilized to retrieve and exhibit the display data of the computer by receiving data communications from the computer. In either example, the external device might "present itself" to the computer as the peripheral device. That is, the computer interacts with the external device as if the external device were the absent peripheral device. Because the computer is "unaware" that the external device is not actually the peripheral device, there may be no need to modify the operation of the computer itself. Therefore, where a goal is to minimize modification of a computer's normal operation, the better means of emulation is by the use of a device which presents itself to the computer as the peripheral device. If the display data available to the external device, for example, a remote video monitor, is substantially identical to the display data available to a video monitor directly connected to the computer, then the remote video monitor may generate a screen image substantially identical to that which would be generated by a video monitor connected to the computer.
One of the challenges presented to a computer user, attempting to emulate one or more of a computer's peripheral devices, is to enable emulation while minimizing interruption of the computer's other functions. Therefore, it is a goal for the external device to communicate with the computer in a manner substantially identical to the manner by which the absent, emulated peripheral device would otherwise have communicated with the computer. Negating the need for intermediate steps, such as a translation step, helps to minimize interruption of the computer's operations. For example, where the emulation of a keyboard is desired, the communication between the external device and the computer might be in a format substantially identical to the keystroke data ordinarily generated by a keyboard connected to the computer.
Several devices and methods have been proffered as solutions to the problems presented by computer peripheral emulation. One such method requires the modification of the computer's initialization procedure, which is typically stored in the read-only memory (ROM) of the computer. Among other things, a computer's initialization procedure can configure the data flow of the computer; thereby directing the computer where to send output data and from where to receive input data. Modification of the computer's initialization procedure may reconfigure the computer so that it can accept data from a source or port different than the source or port identified in the computer's unmodified initialization procedure. In the case of keyboard data, for example, such a reconfiguration could direct the computer to "look for" keyboard data from a serial communications port, rather than from the computer's keyboard port. Similarly, the reconfigured initialization procedure could be modified to redirect display data to a serial communications port, rather than the video monitor port.
One problem with modification of the initialization procedure is that it is not portable to other computers with different initialization procedures. Each computer with a different initialization procedure would require individual modification in order to be properly reconfigured to perform the desired emulation operations. Additionally, modification of the initialization procedure would require replacing computer hardware or firmware (e.g., a ROM chip). Modification of the initialization procedure by such a method would be expensive and impractical, if not impossible, for most computer users. Moreover, once the initialization procedure had been so modified, an equally impractical hardware/firmware replacement would be required to return the computer to its original state of operation.
Another problem with modifying the initialization procedure is that it would redirect only those computer operations that employed the initialization procedure as a source of data flow control information. Assume, for example, that a specific program is running on the computer which utilizes the computer's peripherals. Assume further, that the specific program communicates directly with the computer's peripherals, bypassing the data flow directions of the initialization program. In such an instance, modification of the initialization procedure would have no effect on the operation of the computer running this specific program. Therefore, any attempts to enable emulation of the peripherals by modification of the initialization procedure would be thwarted.
Another emulation method involves the redirection of the computer's peripheral operations by sending commands to the computer's operating system. At startup, this method performs redirection only after the initialization procedure has been completed and the operating system has assumed control of the computer. A problem with this method is that any data generated by the computer, prior to the operating system's assumption of control, will not be made available to the external device. Commonly, computers generate display data, containing error messages to the user, during the execution of the initialization procedure. If an external device, such as a remote video monitor, is required to wait until after execution of the initialization procedure to receive display data from the computer, then the error message would not be displayed in a timely manner. If the error message indicates that some action is required by the user in order to continue execution of the initialization procedure, then the operating system might never be enabled. In a situation where the user is monitoring a computer solely by means of an external device (e.g., a remote computer), the user might not realize that such an error had occurred until it is too late to provide an appropriate remedy.
A device that has been proffered as a solution to some of the problems presented by computer emulation enables a "remote" computer to emulate the keyboard data input and display data output of a "local" computer. This device presents itself to the local computer as an expansion card and performs all emulation functions via the local computer's data bus. The device permits a user of the remote computer to insert keyboard data into the local computer's keyboard controller via the local computer's data bus.
Unfortunately, this device cannot process keyboard data received from the remote computer until the operating system is enabled. In a situation where, as discussed above, an error occurred before or during the execution of the initialization procedure, the remote computer user would be incapable of reacting to the error by means of the remote computer until the initialization procedure had turned control of the local computer over to the operating system. Additionally, this device's use of the local computer's data bus will reduce the efficiency of the local computer's operation. By transmitting keyboard data over the local computer's data bus, this device increases the number of operations the local computer must perform, thereby delaying the processing of other operations.
The use of the computer's data bus for keyboard data transmission reduces the portability of this device from one computer to another. For example, the device may be configured to access a particular area of the local computer's memory as a keyboard data buffer. Where the memory location of this particular area varies from one computer to another, the device would require reconfiguration to be portable between these computers. Similarly, the communications protocol for transmitting keyboard data on the system bus must be matched to the standard protocol of the local computer. If the protocol differs from one computer to another, then the device may need reconfiguration in order to be moved from one computer to the other.
In sum, the devices and methods proffered as solutions to the problem of computer peripheral emulation have various shortcomings. Some do not enable emulation at substantially all times that the computer is operative. Some fail to preclude circumvention of the emulation process by programs directly communicating with peripheral devices. Some require that the emulated peripheral devices be present (i.e., directly connected to the computer) in order to effectively emulate those devices. Others are not portable between computers, requiring reconfiguration of the method, device, or the computer itself. Still others require the computer to perform additional steps, thereby reducing the efficiency of the computer's operation. In almost all cases, the computer itself must be configured to accommodate the emulation method, making the use of commercially available microcomputers impossible.